<?php

/**
 * \file
 * Classe d'un bloc de formulaires multiples.
 */

/**
 * Génération automatique de formulaires d'administration (CRUD).
 */
namespace pilar\MultiForms /* \cond */ ; /* \endcond */
{

/**
 * Bloc d'un Multiformulaire contenant d'autres blocs formulaires.
 *
 * \since 10/02/2009
 * \author Dirk MARSKI <dirk.marski@gmail.com>
 */
abstract class MultiForm extends \pilar\Forms\Form {

/**
 * Membres d'entité présents dans le formulaire.
 *
 * \since 10/02/2009
 */
protected $_entityMembers = array();


/**
 * Valeurs des champs de l'entité.
 *
 * \since 10/02/2009
 */
protected $_entityFieldValues = array();


protected function loadDefaultParams() {
 parent::loadDefaultParams();

 $this->params->define(array(
  'forms' => array(),
  'buttonLabel' => '',
  'defaultRedirection' => ''
 ));
 // TODO :
 // Enlever le paramètre 'buttonLabel'
}


protected function initialize() {
 if ($this->get('independent')) {
 	foreach ($this->get('forms') as $form) {
 		$form->params->independent = false;
 	}
 }
 
 parent::initialize();
 GLOBAL $KER;
 $this->newArea('forms');
 foreach ($this->get('forms') as $form) {
  $this->area('forms')->pushSubBlocks($form);
 }
}


protected function load() {
 parent::load();

 // Ajout de la redirection après soumission :
  $this->addRedirection(
   new \pilar\Redirections\Redirection(array(
    'name' => 'default',
    'redirection' => $this->get('defaultRedirection')
   ))
  );
  $this->redirection('default')->setContainer($this);

 if($this->get('independent')) {
  $this->redirection('default')->append();
  // Ajout du bouton de confirmation :
   $this->appendAtom(
    new \pilar\Forms\Button(array(
     'label' => $this->get('buttonLabel')
    ))
   );
 }
}


protected function buildContentRoot($domDoc) {
 $domForm = $domDoc->createElement('MultiForm');
 
 $domForm->appendChild($this->area('forms')->domNode($domDoc));

 foreach($this->_atoms as $atom) {
  $domForm->appendChild($atom->domNode($domDoc));
 }

 return $domForm;
}


/*
 * Fonction permettant de récupérer les données des formulaires et de vérifier
 * leur validité avant de continuer.
 */
public function loadFromGui() {
 if ($this->_status == 'unknown') {
  $this->_status = parent::loadFromGui();
 
  if ($this->_status == 'valid') {
			foreach($this->get('forms') as $form) {
    $form->doLoad();
    if ($form->loadFromGui() == 'invalid') {
    	$this->_status = 'invalid';
    }
   }
  }
 }
 return $this->_status;
}


} // Class.

} // Namespace.

?>

